package com.ruoyi.common.core.utils;

/**
 * 十六进制字符串和字节数组之间的转换
 * @author shenli
 * @version v0.1.0
 * @since 2025/10/17 10:08
 */
public class HexStrAndBytes {
  /**
   * 将16进制字符串转为byte数组
   *  将16进制字符串转为byte数组
   * @author shenli
   * @since 2019年2月28日 下午8:48:46
   *
   * @param hexStr 十六进制字符串
   */
  public static byte[] hex2Byte(String hexStr) {

    if (hexStr.isEmpty()) {
      return new byte[0];
    }
    byte[] result = new byte[hexStr.length() / 2];
    for (int i = 0; i < result.length; i++) {
      int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
      int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
      result[i] = (byte) (high * 16 + low);
    }
    return result;
  }

  /**
   * 将byte数组转为16进制字符串
   *
   * @param bytes 待转换的字节数组
   * @return 转换后的16进制字符串
   */
  public static String byte2Hex(byte[] bytes) {
    StringBuilder stringBuffer = new StringBuilder();
    String temp ;
    for (byte b : bytes) {
      // 将byte转换为无符号的16进制字符串
      temp = Integer.toHexString(b & 0xFF);
      if (temp.length() == 1) {
        // 补零操作，确保每个字节都用两位16进制数表示
        stringBuffer.append("0");
      }
      stringBuffer.append(temp);
    }
    return stringBuffer.toString();
  }

}
